home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / hitton / htn_src.lzh / HTN_SRC / HTN_TITL.C < prev   
Text File  |  2000-07-03  |  6KB  |  279 lines

  1. /*    『ひっとん』 ver.1.00    タイトル部 (HTN_TITL.C)        2000  TAU Software    */
  2.  
  3. # include    "HTN_DEF.H"
  4.  
  5.  
  6. /***  タイトル用マクロ  ***/
  7.  
  8. # define    FIRST_WAIT 125    /*  タイトル表示までの時間  */
  9. # define    NEXTL_WAIT  25    /*  「ひっとん」表示間隔  */
  10. # define    SEL_WAIT    30    /*  選択肢表示までの時間  */
  11. # define    TITBAK_WAIT 10    /*  タイトルバックカラー変更時間  */
  12. # define    RANK_WAIT  500    /*  ランキング画面表示時間  */
  13.  
  14. # define    SET_TITBAK_CL(cl) for(i=1;i<17;i++){                \
  15.                     GPALET(i*2+2,HSVTORGB((cl),8,i*1.4+2));    \
  16.                     GPALET(i*2+3,HSVTORGB((cl),8,i*1.4+2)); }
  17.                             /*  タイトルバックカラー  */
  18. # define    S_PAL(cl) (50716+(cl)*12682)        /*  選択肢パネル背景色  */
  19.  
  20.  
  21.  
  22.  
  23. /***  音楽演奏  ***/
  24. void PLAY_MUS(no)
  25. int    no;
  26. {
  27.     static int pno=-1;
  28.     int    pl[20][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},
  29.                {17,0,0,0},{18,0,0,0},{19,0,0,0},{20,0,0,0},{21,0,0,0},
  30.                {22,0,0,0},{23,0,0,0},{24,0,0,0},{25,0,0,0},{26,0,0,0}};
  31.  
  32.  
  33.     if(CNF_STAT(1,-1)){
  34.         if(!no) m_fadeout(85);
  35.          else{
  36.         if(no > 100){
  37.             no-=100;
  38.             m_fadeout(0);
  39.             m_cont(*(*(pl+no)),*(*(pl+no)+1),*(*(pl+no)+2),*(*(pl+no)+3),
  40.                                         0,0,0,0,0,0);
  41.         } else{
  42.              no--;
  43.              if(no < 4){
  44.                  if(no!=-1){
  45.                     m_stop(*(*(pl+pno))  ,*(*(pl+pno)+1),
  46.                            *(*(pl+pno)+2),*(*(pl+pno)+3),0,0,0,0,0,0);
  47.                 } else m_stop(0,0,0,0,0,0,0,0,0,0);
  48.                 m_fadeout(0);
  49.              }
  50.             m_play(*(*(pl+no)),*(*(pl+no)+1),*(*(pl+no)+2),*(*(pl+no)+3),
  51.                                         0,0,0,0,0,0);
  52.             if(no < 4) pno=no;
  53.         }
  54.         }
  55.     }
  56. }
  57.  
  58.  
  59.  
  60. /***  ポーズ  ***/
  61.             /* [返り値] 0:通常  0x8000:強制終了  */
  62. int PAUSE()
  63. {
  64.     int    stat=3;        /*  ステイタス  */
  65.     int    jd;
  66.  
  67.     while(stat){
  68.         jd=JOY0(2);
  69.         if(jd&0x8000){ stat=0x8000; break; }    /*  強制終了  */
  70.         switch(stat){
  71.             case 3:
  72.             case 1: if(!(jd&0x4060)) stat--;    /*  [F6]を離しているか  */
  73.                 break;
  74.             case 2: if(jd&0x4060) stat--;    /*  [F6]を押しているか  */
  75.         }
  76.     }
  77.  
  78.     return stat;
  79. }
  80.  
  81.  
  82. /***  ランキング画面  ***/
  83.             /* [返り値]  0:タイトルへ戻る  -1:強制終了  */
  84. int RANKING0(wait)
  85. {
  86.     int i,st,tm;
  87.     int rt=0;    /*  返り血用  */
  88.  
  89.  
  90.  
  91.     SCROLL2(0,256,0); SCROLL2(1,256,0);
  92.  
  93.  
  94.     for(i=0;i<5;i++){
  95.         PRINT_MES( 34,i*25+110,RECS_DATA(i,NULL)->name,i+1);
  96.         PRINT_TXNUM(114,i*25+111,RECS_DATA(i,NULL)->score,1,6,i+1);
  97.         PRINT_TXNUM(175,i*25+111,RECS_DATA(i,NULL)->block,1,4,i+1);
  98.         PRINT_TXNUM(219,i*25+111,RECS_DATA(i,NULL)->level,1,2,i+1);
  99.     }
  100.  
  101.     VDISP0();
  102.     VPAGE2(0x6F);
  103.  
  104.     tm=ONTIME();
  105.     while(1){
  106.         st=JOYINP0(2);
  107.         if(wait != -1) if(D_TIME(tm)>wait && ((JOY0(2)&1)==0)) break;
  108.         if(st & 0x8000){ rt=-1; break; }
  109.         if(st&32) break;
  110.     }
  111.  
  112.     VDISP0();
  113.     VPAGE2(0);
  114.     TXFILL0(0,0,256,256,15,0);
  115.  
  116.     return rt;
  117. }
  118.  
  119.  
  120.  
  121.  
  122. /***  メインタイトル  ***/
  123.             /* [返り値] 選択コマンド (-1:強制終了)  */
  124. int MAIN_TITLE()
  125. {
  126.     int    i,z;        /*  雑用  */
  127.     int    tm,wtm;        /*  タイムカウンタ、待時間  */
  128.     int    ck=1;        /*  タイトル表示効果キャンセルチェック  */
  129.     int    stat=-9,nst;    /*  ステイタス、次のステイタス  */
  130.     int    st,s0,pst,sd;    /*  ジョイ入力、記憶、1つ前の入力、dummy  */
  131.  
  132.     static int    cl=96;    /*  色のカウンタ  */
  133.     static int    com=0,pcom=0;    /*  選択されているコマンド  */
  134.  
  135.     int    log_ptn[4]={ 54,48,44,51 };    /* 『ひっとん』ロゴ表示用  */
  136.  
  137.  
  138.         /*for(i=0;i<6;i++) GPALET(i+36,50716+((i/2)==com)*12682);*/
  139.         for(i=0;i<6;i++) GPALET(i+36,S_PAL((i/2)==com));
  140.  
  141.  
  142.     APAGE(0);
  143.     FILL0(0,256,256,228,0);
  144.  
  145.     SCROLL2(0,0,256); SCROLL2(1,0,256);
  146.  
  147.     VDISP0();
  148.     VPAGE2(0x6F);
  149.     PLAY_MUS(1);
  150.  
  151.  
  152.     i=0; z=0;
  153.     wtm=FIRST_WAIT; nst=-1;
  154.     JOYINP0(2);
  155.     tm=ONTIME();
  156.     while(1){
  157.  
  158.         st=JOYINP0(2);
  159.         if(st & 0x4000){
  160.             tm=D_TIME(tm);
  161.             st|=PAUSE();
  162.             tm=D_TIME(tm);
  163.         }
  164.         if(st & 0x8000){ com=-1; break; }
  165.         
  166.         if(st&32){
  167.             if(stat < 0){ wtm=0; ck=0; }
  168.              else{
  169.                 PLAY_MUS(8);
  170.                 break;
  171.              }
  172.         }
  173.  
  174.  
  175.         switch(stat){
  176.             case  0: if(D_TIME(tm) >= TITBAK_WAIT){
  177.                     tm=ONTIME();
  178.                     cl++; cl%=192;
  179.                     VDISP0();
  180.                     SET_TITBAK_CL(cl)
  181.                  }
  182.  
  183.                  if((st&3)==1 || (st&3)==2){
  184.                     VDISP0();
  185.                     GPALET(36+com*2,S_PAL(0)); GPALET(37+com*2,S_PAL(0));
  186.                     com+=(((st>>1)&1)-(st&1)+3); com%=3;
  187.                     PLAY_MUS(9);
  188.                     GPALET(36+com*2,S_PAL(1)); GPALET(36+com*2,S_PAL(1));
  189.                  }
  190.                  break;
  191.  
  192.             case -1: VDISP0();
  193.                  GRM_GP(z+32,272,*(log_ptn+i),65,HTN_LOG0+z*65,0);
  194.                  if(i == 3){ i=0; wtm=SEL_WAIT*ck; nst=-5; }
  195.                   else{    z+=*(log_ptn+(i++)); wtm=NEXTL_WAIT*ck; }
  196.                  stat=-9;
  197.                  tm=ONTIME();
  198.                  break;            /*  『ひっとん』表示  */
  199.  
  200.             case -5: VDISP0();
  201.                  GRM_GP(65,i*39+350,128,28,SEL_PNL(i),0);
  202.                  if(i == 2){ stat=0; tm=ONTIME(); } else i++;
  203.                  break;            /*  メニュー表示  */
  204.  
  205.             case -9: if(D_TIME(tm) >= wtm) stat=nst;
  206.                  break;            /*  wait  */
  207.         }
  208.     }
  209.  
  210.     VDISP0();
  211.     VPAGE2(0);
  212.  
  213.     return com;
  214. }
  215.  
  216.  
  217.  
  218. /***  タイトル部のメインプログラム  ***/
  219.  
  220. int TITLE0()
  221. {
  222.     int    i;
  223.  
  224.     short int    tit_pal[36];    /*  タイトル用カラーコード記憶用  */
  225.  
  226.     short int    tx_pal[16]={     0,19026,34814, 2046,65504,65472,64544,63488,
  227.                      49120,32704,48190,30782,34786, 1984,33854,30782 };
  228.  
  229.  
  230.     int    com;    /*  コマンド番号  */
  231.     char    vspm;    /*  ビデオ・コントローラ:特殊モード の記憶用  */
  232.     char    vprm;    /*  ビデオ・コントローラ:プラオリティ の記憶用  */
  233.  
  234.  
  235.     vspm=B_BPEEK((unsigned char *)0xE82600);    /*  特殊モードの設定値保存  */
  236.     vprm=B_BPEEK((unsigned char *)0xE82500);    /*  プライオリティの設定値保存  */
  237.     VC_SP(0x1E);                    /*  GRAPHIC画面0と1の半透明  */
  238.     VC_PR(0x12);                    /*  テキスト>スプライト>ラフィック  */
  239.  
  240.  
  241.  
  242.     for(i=0;i<36;i++) *(tit_pal+i)=GPALET(i,-1);
  243.  
  244.     SET_TITBAK_CL(96);
  245.  
  246.  
  247.     PRINT_MES(303, 94,"ヒットヤッスミッ!",4);
  248.     PRINT_MES(303,216,"ヒットヤッスミッ!",4);
  249.  
  250.  
  251.     while(1){
  252.     
  253.         com=MAIN_TITLE();    /*  メインタイトルへ  */
  254.  
  255.         switch(com){
  256.             case 0:        /*  ゲーム画面へ  */
  257.                 PLAY_MUS(3);
  258.                 if((com=HTN_GAME0()) == -1) break;
  259.                 PLAY_MUS(0);
  260.                 com=RANKING0(RANK_WAIT);
  261.                 break;
  262.             case 1:        /*  ゲーム画面へ  */
  263.                 PLAY_MUS(2);
  264.                 com=RANKING0(-1);
  265.                 break;
  266.             case 2:        /*  終了  */
  267.                 com=-1;
  268.         }
  269.         if(com == -1) break;        /*  終了  */
  270.  
  271.  
  272.     }
  273.  
  274.  
  275.     VC_PR(vprm);                    /*  プライオリティの設定を元に戻す  */
  276.     VC_SP(vspm);                    /*  特殊モードの設定を元に戻す  */
  277. }
  278.  
  279.